<?php
header("Content-Type:text/html;charset=utf-8");
/**
 * @param String $msg 提示信息
 * @param String $url 跳转地址
 * @return String $str 结果
 */
function ShowMsg(String $msg, $url = null)
{
    // 定义一个空字符串
    $str = '';
    if ($url) {
        $str = "
            <script>
                alert('$msg');
                location.href = '$url';
            </script>
        ";
    } else {
        $str = "
            <script>
                alert('$msg');
                history.go(-1);
            </script>
        ";
    }

    // 调用函数直接输出
    echo $str;
}

// 预格式化的函数
function pre($data)
{
    echo '<pre>';
    // print_r 输出数组 => echo var_dump
    print_r($data);
    echo '</pre>';
}

/**
 * 获得随机字符串
 * @param   Number  $len    需要的长度
 * @param   Bool    $special    是否需要特殊符号
 * @return  String  返回随机字符串
 */
function build_ranstr($len = 8, $special = false)
{
    $chars = array(
        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
        "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
        "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
        "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
        "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
        "3", "4", "5", "6", "7", "8", "9"
    );

    if ($special) {
        $chars = array_merge($chars, array(
            "!", "@", "#", "$", "?", "|", "{", "/", ":", ";",
            "%", "^", "&", "*", "(", ")", "-", "_", "[", "]",
            "}", "<", ">", "~", "+", "=", ",", "."
        ));
    }

    $charsLen = count($chars) - 1;
    shuffle($chars);                            //打乱数组顺序
    $str = '';
    for ($i = 0; $i < $len; $i++) {
        $str .= $chars[mt_rand(0, $charsLen)];    //随机取出一位
    }
    return $str;
}


/**
 * 图片上传
 * @param String $name 上传图片的
 * @param Array $type 图片格式
 * @param Int $size 图片大小
 * @param String $path 存放上传后图片的路径
 * @return Array $result 返回结果集
 */
function upload($name, $type = ['jpg', 'jpeg', 'png', 'gif'], $size = 1048576, $path = 'upload')
{
    // 判断文件夹是否存在
    if (!is_dir($path)) {
        @mkdir($path);
    }
    // 返回结果
    $result = [
        'code' => 0, // 状态码 1 成功 0 失败
        'msg' => '未知信息',
        'data' => null
    ];
    // 获取错误码
    $ErrorCode = $_FILES[$name]['error'];

    switch ($ErrorCode) {
        case 1:
            $result['msg'] = '上传大小不能超过upload_max_filesize设置的值';
            return $result;
            break;

        case 2:
            $result['msg'] = '上传大小不能超过MAX_FILE_SIZE设置的值';
            return $result;
            break;

        case 3:
            $result['msg'] = '图片上传不完整';
            return $result;
            break;

        case 4:
            $result['msg'] = '没有上传图片';
            return $result;
            break;
    }

    // 获取文件后缀
    $pre = pathinfo($_FILES[$name]['name'], PATHINFO_EXTENSION);

    // $preT = pathinfo($name)['extension'];

    if (!in_array($pre, $type)) {
        $result['msg'] = '上传图片文件格式错误'.$pre;
        return $result;
    }

    //获取文件大小
    $FileSize = $_FILES[$name]['size'];
    if ($FileSize > $size) {
        $result['msg'] = '图片文件过大，请压缩后再上传';
        return $result;
    }

    // 设置上传图片名称 20220510121989998888.jpg
    $FileName = date('YmdHis', time()) . mt_rand(1000, 9999) . mt_rand(1000, 9999) . '.' . $pre;

    //检查http post 上传
    if (is_uploaded_file($_FILES[$name]['tmp_name'])) {
        move_uploaded_file($_FILES[$name]['tmp_name'], $path . '/' . $FileName);
        $result = [
            'code' => 1,
            'msg' => '上传图片成功',
            'data' => $path . '/' . $FileName
        ];
        return $result;
    } else {
        $result['msg'] = '上传图片失败';
        return $result;
    }
}


/**
 * ajax操作成功函数
*/
function success($msg = '未知信息',$data = null,$code = 1){
    $result = [
        'msg' => $msg,
        'data' => $data,
        'code' => $code
    ];
    echo json_encode($result);
    exit;
}

/**
 * ajax操作失败函数
*/
function error($msg = '未知信息',$data = null,$code = 0){
    $result = [
        'msg' => $msg,
        'data' => $data,
        'code' => $code
    ];
    echo json_encode($result);
    exit;
}

/* 
*   获取当前的网址   
*/

function get_url()
{
    // 获取当前的完整地址
    $str = $_SERVER['PHP_SELF'] . '?';

    if($_GET){
        foreach($_GET as $k => $v){
            if($k != 'page'){
                $str.= $k.'='.$v.'&';
            }
        }
    }

    return $str;

}

/** 
 * 
 * 分页函数
 * @pargam $current 当前页
 * @pargam $count   记录总数
 * @pargam $limit   每页显示多少条
 * @pargam $size    中间显示多少条
 * @pargam $class   样式
 * 
*/
function page($current,$count,$limit,$size,$class='digg')
{
    $str = '';
    if($count > $limit){
        // 算出总页数
        $pages = ceil($count / $limit);
        // 获取当前页面的url（带有参数的）
        $url = get_url();
        // 开始拼接分页
        $str.='<div class="'.$class.'">';

        // 判断当前页是否是1
        if($current == 1){
            $str.='<span class="disabled">首&nbsp;&nbsp;页</span>';
            $str.='<span class="disabled">上一页</span>';
        }else{
            $str.='<a href="'.$url.'page=1">首&nbsp;&nbsp;页</a>';
            $str.='<a href="'.$url.'page='.($current - 1).'">上一页</a>';
        }

        // 中间
        if($current<=floor($size / 2)){
            $start = 1;
            $end = $pages < $size ? $pages : $size;
        }elseif ($current >= $pages - floor($size / 2)) {
            $start = $pages - $size + 1 <= 0 ? 1 : $pages - $size + 1;
            $end = $pages;
        }else {
            $start = $current - floor($size / 2);
            $end = $current + floor($size / 2);
        }

        for($i=$start;$i<=$end;$i++){
            if($i==$current){
                $str.='<span class="current">'.$i.'</span>';
            }else{
                $str.='<a href="'.$url.'page='.$i.'">'.$i.'</a>';
            }
        }

        //最后
        if($pages==$current){
            $str .='<span class="disabled">下一页</span>';
            $str.='<span class="disabled">尾&nbsp;&nbsp;页  </span>';
        }else{
            $str.='<a href="'.$url.'page='.($current+1).'">下一页</a>';
            $str.='<a href="'.$url.'page='.$pages.'">尾&nbsp;&nbsp;页 </a>';
        }

        $str.='</div>';
    }

    return $str;
}